<?php 
/**
* Films_contr
* 
* Реализует следующие возможности:
* - добавление новых фильмов;
* - загрузка данных о фильме с сайта {@link http://www.imdb.com}
* - отображение информации о фильме;
* - добавление комментариев.
* 
* @author Утехин Е.А. <hotab.jn@gmail.com>
* @version 1.0
*/

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Films_contr extends CI_Controller {

   /**
   * Метод класса
   * 
   * Разграничивает права на добавление фильмов.
   * 
   */
	public function film_add() {
		$this->session;
		if ($this->session->userdata('is_auth') == 1) {
			$data['email'] = $this->session->userdata('email');
			$data['is_auth'] = $this->session->userdata('is_auth');
			$this->load->view('film_add', $data);
		}
		else {
			$data['text'] = "Только авторизованные пользователи могут добавлять фильмы!";
			$data['list'] = $this->Films_model->get_films_list();
			$data['stat'] = $this->Films_model->get_stat();
			$this->load->view('main', $data);
		}
	}

   /**
   * Метод класса
   * 
   * Формирует данные о новом фильме для дальнейшего
   * сохранения в БД
   * 
   */	
	public function film_save() {
		if ($this->input->post('sub')) {
			$data['title'] = $this->input->post('title', TRUE);
			$data['imdbId'] = $this->input->post('imdbid', TRUE);
			$data['genre'] = $this->input->post('genre', TRUE);
			$data['description'] = $this->input->post('description', TRUE);
			$imdbdata = $this->get_imdb_data($data['imdbId']);
			foreach ($imdbdata[0] as $key => $value) {
				$data[strtolower($key)] = $value;
			}
			$data['posted'] = date('Y-m-d');
			$this->Films_model->save_film_data($data);
			$tmp['text'] = "Фильм успешно добавлен!";
			$tmp['list'] = $this->Films_model->get_films_list();
			$tmp['stat'] = $this->Films_model->get_stat();
			$this->load->view('main', $tmp);
		}
	}

   /**
   * Метод класса
   * 
   * @param array $arr массив
   * @param array $name массив
   * @return array
   */	
	private function get_value($arr, $name) {
		$search_count = count($name);
		$i = 0;
		$responce = array();
		foreach ($arr[1]['attributes'] as $key => $value) {
			if (($i < $search_count) && (in_array($key, $name))) {
				$responce[$key] = $value;
				$i++;
			}
		}
		return $responce;		
	}
	
   /**
   * Метод класса
   * 
   * @param string $imdbid строка
   * @return array
   */	
	private function get_imdb_data($imdbid) {
		$url = "http://imdbapi.com/?i=".$imdbid."&r=xml";
		$tmp = file_get_contents(urldecode($url));
		$xml = xml_parser_create();
		xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1);
		xml_parse_into_struct($xml, $tmp, $element, $xml_array);
		xml_parser_free($xml);
		$data[] = $this->get_value($element, array('YEAR', 'POSTER', 'IMDBRATING'));
		return $data;
	}

   /**
   * Метод класса
   * 
   * @param integer $idfilms целое число
   *
   */	
	public function show_film_info($idfilms) {
		$data = $this->Films_model->get_film_info($idfilms);
		$this->session;
		$data['email'] = $this->session->userdata('email');
		$data['is_auth'] = $this->session->userdata('is_auth');
		$this->load->view('film_info', $data);
	}

   /**
   * Метод класса
   * 
   * Подготавливает данные для сохранения
   * комментария в БД.
   * 
   */	
	public function add_comment() {
		if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
			$email = $this->input->post('email', TRUE);
			$data['idusers'] = $this->Main_model->get_user_id($email);
			$data['comment'] = $this->input->post('comment', TRUE);
			$data['idfilms'] = $this->input->post('idfilms', TRUE);
			$data['posted'] = date('Y-m-d');
			$this->Films_model->add_comment($data);
		}
	}

   /**
   * Метод класса
   * 
   * @return JSON
   */	
	public function comment_list() {
		if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
			$idfilms = $this->input->post('idfilms', TRUE);
			$responce = $this->Films_model->get_comment_list($idfilms);
			header ("Content-Type:application/json");
			echo json_encode($responce);
		}
	}
}
